/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package vista;

import java.util.Iterator;
import javax.swing.JOptionPane;
import util.validation.GestorValidacion;

/**
 *
 * @author raul
 */
public abstract class GestorVistaEditor extends GestorVista
        implements IGestorEditor {
    
    public static final int CREACION = 0;
    public static final int MODIFICACION = 1;
    
    private int modo;
    private GestorValidacion gestorValidacion = new GestorValidacion();

    public int getModo() {
        return modo;
    }

    public void setModo(int modo) {
        this.modo = modo;
    }
    
    public boolean isCreacion(){
        return getModo() == CREACION;
    }
    
    protected GestorValidacion getGestorValidacion() {
        return gestorValidacion;
    }
    
    public void mostrarMensajesDeError(){
        JOptionPane.showMessageDialog(getFormulario(),
                construirMensaje(), "Completar los campos mínimos", JOptionPane.ERROR_MESSAGE);
    }
    
    public String construirMensaje(){
        StringBuilder buf = new StringBuilder();
        Iterator<String> i = gestorValidacion.getMensajes().iterator();
        while(i.hasNext()){
            buf.append(i.next()).append("\n");
        }
        return buf.toString();
    }
    
    /**Devuelve el nombre del objeto que se esta trabajando mas el articulo(El/La)
     * correspondiente.
     * 
     * @return el nombre del objeto que se mostrara en los mensajes
     */
    public abstract String getNombreObjeto();
    
    public abstract void cerrarFormulario();

    @Override
    public void guardar() {
        gestorValidacion.validar(getFormulario());
        if (gestorValidacion.validaFormulario()) {
            setearModeloConVista();
            if (getGestorModelo().validaModelo()) {
                getGestorModelo().guardar();
                accionPostGuardado();
                JOptionPane.showMessageDialog(getFormulario(), getNombreObjeto() + " se\n"
                        + "guardo correctamente");
                cerrarFormulario();
            } else {
                JOptionPane.showMessageDialog(getFormulario(),
                        getNombreObjeto() + " que intenta registrar "
                        + "ya se encuentra registrado en la base de datos",
                        "Error", JOptionPane.ERROR_MESSAGE);
                if (!isCreacion()) getGestorModelo().deshacerCambios();
            }
        } else {
            mostrarMensajesDeError();
        }
    }
    
    /**
     * Metodo auxiliar que permite agregar funcionalidad
     */
    public void accionPostGuardado(){
        
    }
    
}
